# -*- coding:utf-8 -*-

'''
如何得到一个数据流中的中位数？
如果从数据流中读出奇数个数值，那么中位数就是所有数值排序之后位于中间的数值。
如果从数据流中读出偶数个数值，那么中位数就是所有数值排序之后中间两个数的平均值。
'''

import math
import heapq

class Solution:
    nums = []
    def Insert(self, num):
        heapq.heappush(self.nums, num)

    def GetMedian(self):
        mid = math.ceil(len(self.nums)/2)
        return (heapq.nlargest(mid, self.nums)[-1] + heapq.nsmallest(mid, self.nums)[-1])/2.0


S = Solution()
S.Insert(4)
S.Insert(1)
S.Insert(5)
S.Insert(2)
S.Insert(3)
print(S.GetMedian())